package com.carrey.carrey_utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 	字符串工具类
 * @author Carre
 *
 */
public class StringUtils {

	// 邮箱正则
	private static final String EMAIL_REGEX = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
	// 手机正则
	private static final String PHONE_REGEX = "^1[3|4|5|7|8]\\d{9}$";
	// 字母正则
	private static final String LETTER_REGEX = "[a-zA-Z]+";

	// 传入字符串非空校验
	/**
	 * 	字符串非空（不包含空格，非法输入）
	 * 
	 * @param str
	 * @return boolean
	 */
	public static boolean hasText(String str) {
	
		if (str != null && str.trim().length() > 0) {
			return true;
		}
		return false;
	}

	/**
	 * 	字符串非空（包含空格）
	 * 
	 * @param str
	 * @return boolean
	 */
	public static boolean hasLength(String str) {
		if (str != null && str.length() > 0) {
			return true;
		}
		return false;
	}

	// 反转字符串：carrey --->yerrac
	/**
	 * 	反转字符串
	 * 
	 * @param str
	 * @return
	 */
	public static String reverse(String str) {
		if (!hasText(str)) {
			return "字符串不能为空";
		}
		return new StringBuilder(str).reverse().toString();
	}

	/**
	 * 	隐藏字符串：将敏感信息隐藏（18610651866 ---> 186****1866）
	 * 
	 * @param str
	 * @param start
	 * @param end
	 * @return
	 */
	public static String hiddenStr(String str, Integer start, Integer end) {
		if (!hasText(str)) {
			return "字符串不能为空";
		}
		// 截取要隐藏字符串的范围
		String replace = str.substring(start, end);
		String replaceAll = "";
		// 2、截取前边
		String before = str.substring(0,start);
		String after = str.substring(end,str.length());
		// 替换截取的字符串
		for (int i = 0; i < replace.length(); i++) {
			replaceAll += "*";
		}
		return before + replaceAll + after;
	}

	// 判断出入字符串是否全为字母
	public static boolean isLetter(String str) {
		if (hasText(str)) {
			return str.matches(LETTER_REGEX);
		}
		return false;
	}

	// 判断出入字符串是否为合法的手机号
	public static boolean isPhone(String str) {
		if (hasText(str)) {
			return str.matches(PHONE_REGEX);
		}
		return false;
	}

	// 判断传入字符串是否为邮箱
	/**
	 * 	判断传入字符串是否为邮箱
	 * 
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email) {
		// 判断字符是否有值
		if (hasText(email)) {
			return email.matches(EMAIL_REGEX);
		}
		return false;
	}
	
	/**
	 * 	判断字符串A中是否包含字符串B
	 * @param src
	 * @param regex
	 * @return
	 */
	public static boolean getPlaceholderValue(String src, String  regex){
        // 编译规则
        Pattern p = Pattern.compile(regex);
        // Pattern 匹配src
        Matcher matcher = p.matcher(src);
        // 如果找到
        if(matcher.find()) {
           //返回匹配到的字符串
           return true;
        }
      return false;
	}
	
	/**
	 * 判断字符串A中是否包含字符串B
	 * 
	 * @param src
	 * @param regex
	 * @return
	 */
	public static String getPlaceholderValue2(String src, String regex) {
		// 编译规则
		Pattern p = Pattern.compile(regex);
		// Pattern 匹配src
		Matcher matcher = p.matcher(src);
		// 如果找到
		if (matcher.find()) {
			// 返回匹配到的字符串
			return matcher.group();
		}
		return null;
	}
	
}
